package main

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-11 15:21:00
 * @Description:
 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作（push、pop、peek、empty）：

实现 MyQueue 类：

void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空，返回 true ；否则，返回 false
说明：

你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque（双端队列）来模拟一个栈，只要是标准的栈操作即可。
*/

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-11 15:21:16
 * @Description:
 */

type MyQueue struct {
	List      []int
	TailIndex int
}

func ConstructorQueue() MyQueue {
	return MyQueue{List: make([]int, 0), TailIndex: -1}
}

func (queue *MyQueue) Push(x int) {
	queue.TailIndex++
	if queue.TailIndex == len(queue.List) {
		queue.List = append(queue.List, x)
	} else {
		queue.List[queue.TailIndex] = x
	}
}

func (queue *MyQueue) Pop() int {
	v := queue.List[0]
	for i := 0; i <= queue.TailIndex-1; i++ {
		queue.List[i] = queue.List[i+1]
	}
	queue.TailIndex--
	return v
}

func (queue *MyQueue) Peek() int {
	return queue.List[0]
}

func (queue *MyQueue) Empty() bool {
	return queue.TailIndex == -1
}
